package LeetCode热题HOT100;

public class p238除自身以外数组的乘积 {

    public int[] productExceptSelf(int[] nums) {
        //左右乘积数组
        int[] left=new int[nums.length];
        int[] right=new int[nums.length];

        left[0]=1;
        for (int i = 1; i <nums.length; i++) {
            left[i]=left[i-1]*nums[i-1];
        }

        right[nums.length-1]=1;
        for (int i = nums.length-1-1; i >=0; i--) {
            right[i]=right[i+1]*nums[i+1];
        }

        int[] res=new int[nums.length];
        for (int i = 0; i <nums.length; i++) {
            res[i]=left[i]*right[i];
        }
        return res;
    }


    public int[] productExceptSelf2(int[] nums) {
        // 除法，存在0的情况，不可行！
        int mul=1;
        for (int i = 0; i <nums.length; i++) {
            mul *= nums[i];
        }

        int[] ans=new int[nums.length];
        for (int i = 0; i <nums.length; i++) {
            ans[i]=mul / nums[i];
        }
        return ans;
    }


    public int[] productExceptSelf1(int[] nums) {
        //暴力解法，超时
        int[] ans=new int[nums.length];

        for (int i = 0; i <nums.length; i++) {
            int res=1;
            for (int j = 0; j <nums.length; j++) {
                if (j==i) {
                    continue;
                }
                res *= nums[j];
            }
            ans[i]=res;
        }
        return ans;

    }
}
